package com.bustamanteortega.diagnosticopds;

import java.io.IOException;

import modelo.Cuestionario;
import modelo.Pregunta;
import net.RequestMethod;
import net.RestClient;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.text.format.Time;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class ResponderPreguntaActivity extends Activity {

	TextView txtResultado;
	private String URL = "http://172.22.200.1:8080/ServicioWebSoap/services/ServicioWebCarteleraCine";
	private String NAMESPACE = "http://ws.cartelera";
	private Cuestionario cuestionario;
	
	
	private TextView txtEnunciado;
	private Button botonSi;
	private Button botonNo;
	
	private int numPregunta;
	
	View.OnClickListener handlerBotones = new View.OnClickListener() {
		  public void onClick(View v) {
		      if( botonSi.getId() == ((Button)v).getId() ){
		          ResponderPreguntaActivity.this.cuestionario.getPreguntas()[numPregunta].setRespuesta(1);
		          ResponderPreguntaActivity.this.mostrarPregunta(numPregunta + 1);
		      }
		      else if( botonNo.getId() == ((Button)v).getId() ){
		          ResponderPreguntaActivity.this.cuestionario.getPreguntas()[numPregunta].setRespuesta(0);
		          ResponderPreguntaActivity.this.mostrarPregunta(numPregunta + 1);
		      }
		  }
	};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_responder_pregunta);
        
        
        this.txtEnunciado = (TextView) findViewById(R.id.textViewEnunciado);
        this.botonSi = (Button) findViewById(R.id.buttonSi);
        this.botonNo = (Button) findViewById(R.id.buttonNo);
        this.numPregunta = 0;
        
        this.botonNo.setOnClickListener(this.handlerBotones);
        this.botonSi.setOnClickListener(this.handlerBotones);
        
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            int value = extras.getInt("idCuestionario");
            this.obtenerEncuesta(value);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_responder_pregunta, menu);
        return true;
    }
    
    
    public void obtenerEncuesta(int id){

    	String url = "http://10.0.2.2:8787/pds/cuestionarios/" + id;
    	    	
		RestClient client = new RestClient(url);
		try {
			client.execute(RequestMethod.GET);
			if(client.getResponseCode() == 200) {
				
				//Successfully connected
				String cuestionarioJSON = client.getResponse();				
				JSONObject cuestionario = new JSONObject(cuestionarioJSON);
				
				Cuestionario cuest = new Cuestionario();
				cuest.setDescripcion(cuestionario.getString("Descripcion"));
				cuest.setNombre(cuestionario.getString("Nombre"));
				cuest.setId(cuestionario.getInt("Id"));
				
				JSONArray preguntasJSON = cuestionario.getJSONArray("Preguntas");
				Pregunta[] preguntas = new Pregunta[preguntasJSON.length()];
				
				for( int i = 0; i < preguntasJSON.length(); i++){
					JSONObject preg = preguntasJSON.getJSONObject(i);
					Pregunta p = new Pregunta();
					p.setEnunciado(preg.getString("Enunciado"));
					p.setId(preg.getInt("Id"));
					p.setRespuesta(-1);
					preguntas[i] = p;
				}
				cuest.setPreguntas(preguntas);
				this.cuestionario = cuest;
				
				this.mostrarPregunta(0);
				
				
			} else if(client.getResponseCode() == 404){
				//error connecting to server, lets just return an error
				Toast.makeText(getApplicationContext(), "No hay cuestionario", Toast.LENGTH_SHORT).show();
	
			}else{
				Toast.makeText(getApplicationContext(), "Error, no se puede conectar" + url, Toast.LENGTH_SHORT).show();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    public void mostrarPregunta(int numPregunta){
    	
    	if(numPregunta >= this.cuestionario.getPreguntas().length) {
    		this.enviarEncuesta(null);
    	}else{
    		this.numPregunta = numPregunta;
        	this.txtEnunciado.setText( this.cuestionario.getPreguntas()[numPregunta].getEnunciado() );
    	}
    	
    }

    public void responderPregunta(){
    	
    }
    
    public void enviarEncuesta(View v){
    	SharedPreferences mySharedPreferences = getSharedPreferences("USER_PREFS", Activity.MODE_PRIVATE);
    	String rut = mySharedPreferences.getString("RUT", null);
    	
    	String url = "http://10.0.2.2:8787/pds/encuestas/" + rut;
		RestClient client = new RestClient(url);
		
			
		try {
			
			Time ahora = new Time();
			ahora.setToNow();
			
			
			JSONObject encuesta = new JSONObject();
			encuesta.put("Id", 0);
			encuesta.put("Fechahora", ahora.format3339(false));
			encuesta.put("PacienteRut", rut );
			
			JSONArray preguntas = new JSONArray();
			
			for(int i=0; i < this.cuestionario.getPreguntas().length; i++){
				JSONObject preg = new JSONObject();
				preg.put("Id", this.cuestionario.getPreguntas()[i].getId());
				preg.put("Respuesta", this.cuestionario.getPreguntas()[i].getRespuesta());
				preg.put("Enunciado", this.cuestionario.getPreguntas()[i].getEnunciado());
				preguntas.put(preg);
			}
			
			
			JSONObject cuestionario = new JSONObject();
			cuestionario.put("Id", this.cuestionario.getId());
			cuestionario.put("Nombre", this.cuestionario.getNombre());
			cuestionario.put("Descripcion", this.cuestionario.getDescripcion());
			cuestionario.put("Preguntas", preguntas);
			
			encuesta.put("Cuestionario",cuestionario);			
						
			client.setJSONString(encuesta.toString());			
			Log.i("androidd", encuesta.toString() );
			
			
			client.execute(RequestMethod.POST);
			
			int codigoResultado = client.getResponseCode();
			if(client.getResponseCode() == 202) {
				//Successfully connected
							
			} else if(client.getResponseCode() == 404){
				//error connecting to server, lets just return an error
				Toast.makeText(getApplicationContext(), "Usuario no registrado", Toast.LENGTH_SHORT).show();
	
			}else{
				Toast.makeText(getApplicationContext(), "Error, no se puede conectar" + client.getResponseCode() + url , Toast.LENGTH_SHORT).show();
			}
			
			
			Intent myIntent = new Intent(ResponderPreguntaActivity.this, FinEncuesta.class);
			Bundle b = new Bundle();
			b.putInt("resultado", codigoResultado); 
			myIntent.putExtras(b);
			ResponderPreguntaActivity.this.startActivity(myIntent);
			
			
			finish();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    
}
